package org.sdkj.device.tg.jni;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * jni服务
 * 
 * v1.0 zhanghc 2017年10月20日上午11:30:36
 */
public interface TGFingerVeinApiJni extends Library {
	public static final TGFingerVeinApiJni API = (TGFingerVeinApiJni) Native.loadLibrary("TGXGFingerVeinAPI",
			TGFingerVeinApiJni.class);

	/**
	 * 特征提取：从加密的指静脉图片中提取指静脉特征 Input： unsigned char*
	 * encryptImg：加密的指静脉图片数据缓存区指针(缓存区 imgWidth*imgHeight Bytes) int
	 * imgWidth：加密的指静脉图片宽度（像素） int imgHeight：加密的指静脉图片高度（像素） const char*
	 * licenseDatPath：许可证文件路径 Output： unsigned char*
	 * feature：从加密的指静脉图片中提取到的指静脉特征数据缓存区指针 （缓存区 5776 Bytes） Return： 0：特征提取成功，
	 * unsigned char* feature 数据有效 1：许可证过期，特征提取失败， unsigned char* feature 数据无效
	 * 2：许可证无效，特征提取失败， unsigned char* feature 数据无效 else：特征提取失败， unsigned char*
	 * feature 数据无效 Others： 该函数的使用必须传入许可证文件数据，圣点科技已提供限时使用的免费试用版许可证，
	 * 其他版本的许可证请咨询圣点科技。 加密的指静脉图片是指指静脉图片是加密过的。
	 * 一般在录入手指的时候调用三次该函数，提取同一根手指的三幅图片的指静脉特征，提 取的三个指静脉特征用于特征融合。
	 * 一般在验证手指的调用一次该函数，提取一个指静脉特征，用于特征比对。
	 * 
	 * v1.0 zhanghc 2017年10月20日上午11:25:33
	 * 
	 * @param encryptImg
	 * @param imgWidth
	 * @param imgHeight
	 * @param feature
	 * @param licenseDatPath
	 * @return int
	 */
	int TGImgExtractFeature(byte[] encryptImg, int imgWidth, int imgHeight, byte[] feature, String licenseDatPath);

	/**
	 * 特征融合：将同一根手指的三个特征数据，融合成该手指的大特征数据 Input： unsigned char*
	 * feature1：待融合的特征数据1缓存区指针（缓存区 5776 Bytes） unsigned char*
	 * feature2：待融合的特征数据2缓存区指针（缓存区 5776 Bytes） unsigned char*
	 * feature3：待融合的特征数据3缓存区指针（缓存区 5776 Bytes） Output： unsigned char*
	 * fusionFeature：三个特征融合成的大特征数据缓存区指针（缓存区17328 Bytes） Return： 0：特征融合成功，
	 * unsigned char* fusionFeature 数据有效 else：特征融合失败， unsigned char*
	 * fusionFeature 数据无效 Others： 一般在录入手指的时候调用一次该函数，将三个指静脉特征融合成大特征，融合的大特征
	 * 用于特征比对，一般存放于数据库中。
	 * 
	 * v1.0 zhanghc 2017年10月20日上午11:28:01
	 * 
	 * @param feature1
	 * @param feature2
	 * @param feature3
	 * @param fusionFeature
	 * @return int
	 */
	int TGFusionFeature(byte[] feature1, byte[] feature2, byte[] feature3, byte[] fusionFeature);

	/**
	 * 特征比对：将一个特征数据与地址连续的多个大特征数据进行比对，从而在地址连续的多 个大特征数据中找到与之相匹配的大特征数据的位置 Input：
	 * unsigned char* feature：待比对的特征数据缓存区指针（缓存区 5776 Bytes） unsigned char*
	 * regFeatureStart：地址连续的的多个大特征数据缓存区指针（缓存区 regFeatureNum*17328 Bytes） int
	 * regFeatureNum：地址连续的多个大特征的个数 Output： int*
	 * matchIndex：在地址连续的多个大特征数据中找到与之相匹配的大特征数据其位置 的变量指针 unsigned char*
	 * updateRegFeature：保留参数 Return： 0：特征比对成功， int* matchIndex 数据有效 else：特征比对失败，
	 * int* matchIndex 数据无效 Others： 一般在验证手指的时候调用一次该函数，若比对成功，则查看 int* matchIndex。
	 * 地址连续的多个大特征数据是指将数据库中的所有大特征数据连接在一起，是在一块连续
	 * 的地址中连续存放大特征1数据_大特征2数据_大特征3数据...如果匹配到的是大特征1，
	 * 则*matchIndex为0，匹配到的是大特征2，则*matchIndex为1。
	 * @param feature  要比对的特征
	 * @param tmplStart 模板集合，多个模板拼接而成
	 * @param tmplNum 模板集合的长度
	 * @param matchIndex 匹配到的位置存入该地址
	 * @param updateTmpl 返回的最新模板，可以用于当做最新的模板，也可以忽略
	 * @return
	 */
	int TGMatchFeature1N(byte[] feature, byte[] tmplStart, int tmplNum, int[]matchIndex, byte[]updateTmpl);
}
